其他
Tkinter自定义GUI界面背景logo,爆赞!
遗留问题
效果展示
Tkinter组件介绍
「Canvas」
from tkinter import *
root = Tk()
cv = Canvas(root, bg='white')
cv.create_rectangle(10, 10, 200, 200)
cv.pack()
root.mainloop()
from tkinter import *
root = Tk()
cv = Canvas(root, bg='white')
cv.create_ovale(10, 10, 200, 200)
cv.pack()
root.mainloop()
from tkinter import *
from PIL import Image,ImageTk
root = Tk()
#注该代码下须有对应的图片文件
im_root = ImageTk.PhotoImage(Image.open('猫.jpg'))
canvas_root = Canvas(root, width=440, height=440)
canvas_root.create_image(220, 220, image=im_root)
canvas_root.pack()
root.mainloop()
「Frame」
def change():
frame1.pack_forget() #将该框架隐藏
frame2.pack()
def change1():
frame2.pack_forget() #将该框架隐藏
frame1.pack()
root = Tk()
root.geometry('200x100+600+300')
frame1 = Frame(root)
frame2 = Frame(root)
Label(frame1, text="你好").grid(row=0,column=0)
Label(frame2, text="hello").grid(row=0,column=0)
Button(frame1, text="hello", command=change).grid(row=0,column=1)
Button(frame2, text="你好",command=change1).grid(row=0,column=1)
frame1.pack()
frame2.pack()
frame2.pack_forget() #将该框架隐藏
root.mainloop()
完整代码
from PIL import Image,ImageTk
class tkinter():
def __init__(self,root):
self.root = root
self.root.title("数据分析与统计学之美") # 窗口标题栏
self.root.geometry('640x360+600+300') # 窗口大小
self.root.resizable(width=FALSE, height=FALSE) # 限制窗口大小,拒绝用户调整边框大小
self.frame=Frame(self.root,borderwidth=0) #创建两个框架
self.frame1=Frame(self.root)
def homepage(self):
global im_root, im_root1 # 注,在类里需将放置图片的对象定义为全局变量
im_root = ImageTk.PhotoImage(Image.open('草原.png')) #打开图片
im_root1 = ImageTk.PhotoImage(Image.open('草原一角.png'))
canvas_root = Canvas(self.frame, width=640, height=360)
canvas_root.create_image(320, 180, image=im_root) #放置图片
canvas_root.pack()
Button(self.frame, text="切换背景为日出",borderwidth=0, image=im_root1,command=self.switch_button,compound="center").place(width=200, height=50,x=1,y=2)
self.frame.pack()
self.Se_page() #先将两个框架内容展示出来,再将其中一个隐藏起来
self.frame1.pack_forget() #隐藏第二个框架的内容
def switch_button(self): #隐藏第一个框架内容,展示第二个框架内容
self.frame.pack_forget()
self.frame1.pack()
def Se_page(self):
global im_root2, im_root3 # 注,在类里需将放置图片的对象定义为全局变量
im_root2 = ImageTk.PhotoImage(Image.open('日出.png'))
im_root3 = ImageTk.PhotoImage(Image.open('日出一角.png'))
canvas_root = Canvas(self.frame1, width=640, height=360)
canvas_root.create_image(320, 180, image=im_root2)
canvas_root.pack()
Button(self.frame1, text="背景切换为草原",borderwidth=0, image=im_root3,command=self.switch_button1,compound="center").place(width=200, height=50,x=440,y=2)
self.frame1.pack()
def switch_button1(self): #隐藏第二个框架内容,展示第一个框架内容
self.frame1.pack_forget()
self.frame.pack()
if __name__ == '__main__':
root = Tk()
tk = tkinter(root)
tk.homepage()
root.mainloop()
global im_root, im_root1 # 注,在类里需将放置图片的对象定义为全局变量
im_root = ImageTk.PhotoImage(Image.open('草原.png')) #打开图片
im_root1 = ImageTk.PhotoImage(Image.open('草原一角.png'))
canvas_root = Canvas(self.frame, width=640, height=360)
canvas_root.create_image(320, 180, image=im_root) #放置图片
canvas_root.pack()
Button(self.frame, text="切换背景为日出",borderwidth=0, image=im_root1,command=self.switch_button,compound="center").place(width=200, height=50,x=1,y=2)
self.frame.pack()
self.Se_page() #先将两个框架内容展示出来,再将其中一个隐藏起来
self.frame1.pack_forget() #隐藏第二个框架的内容